#ifndef __LOGGERDEF_H__
#define __LOGGERDEF_H__

#include <string>
#include "framework_global.h"
#include "plat/nonecopyable.h"

#define LOGGER_NEWLINE          NEWLINE

/* output log's level */
#define LOGGER_LEVEL_NONE                    -1
#define LOGGER_LEVEL_FATAL                    0
#define LOGGER_LEVEL_ERROR                    1
#define LOGGER_LEVEL_WARN                     2
#define LOGGER_LEVEL_INFO                     3
#define LOGGER_LEVEL_DEBUG                    4

enum class LoggerWriteMode
{
    ASync = 0,
    Sync
};

enum class LoggerLevel
{
   None = 0,
   Debug,
   Info,
   Warn,
   Error,
   Fatal
};

class LoggerConfiguration : public NoneCopyable
{
public:
    LoggerWriteMode WriteMode = LoggerWriteMode::ASync;
    LoggerLevel CurrentLevel = LoggerLevel::Debug;
    bool LogEnable = true;
    
    bool AutoSpacing = true;
    bool AutoNewLine = true;
    bool BooleanShowConvert = true;
    bool ShortFileNameEn = true;

    //日志格式定制
    bool ShowLoggerName = false;
    bool ShowDate = false;
    bool ShowTime = true;
    bool ShowThreadName = false;
    bool ShowThreadId = false;
    bool ShowLevel = true;
    bool ShowFileName = false;
    bool ShowFileLine = false;
    bool ShowFuncName = false;
    bool ShowTag = false;
};

#endif // __LOGGERDEF_H__
